var { sqlCheckType, err_reply, success_reply, success_reply2 } = require('../types/type.js') // 引入枚举类型

var dbConfig = require('../../util/dbconfig.js') // 引入dbconfig

var timeExchange = require('../.././tools/timeExchange.js'); // 封装好的时间工具
const { array } = require('i/lib/util.js');
const dbconfig = require('../../util/dbconfig.js');
// const { json } = require('express');
const { validateLoginState } = require('../base/base_validate.js'); // 登录校验
const { json } = require('express');
const { format } = require('mysql');

/**
 * @description 查询权限列表
 */
const other_lists = async (req, res) => {
   // 1、校验登录状态
   const validateLogin = await validateLoginState(res, req, 'get','other_lists')
   if (!validateLogin) return

   // 2、定义查询函数
   const requese_public = (res, sql) => {
    return new Promise((reslove) => {
      dbConfig.sqlConnect(sql, [], (err, data) => {
        if(err) {
          console.log('*******************')
          console.log('查询粗错啦：' + err)
          console.log('打印SQL语句：' + sql)
          console.log('*******************')
          // err_reply('other/permission',res,'权限列表查询失败')
          
          reslove([]) // 查询出错，返回空数组即可
        } else {
          reslove(data)
        }
      })
    })
   }



  // 3、查询 - 所有菜单表
  const sql_menu = `SELECT id, menu_name, tag, parent_id, permissions_role_ids, menu_type FROM ${`menu`};`
  const data_menu = await requese_public(res, sql_menu)
  
  // 4、查询 - 所有权限表
  const sql_permissions = `SELECT id, name, tag, menu_id FROM ${`actionPermissions`};`
  const data_permissions = await requese_public(res, sql_permissions)

  // 5、查询 - 所有角色
  const sql_role = `SELECT id, role_level, role_name FROM ${`role`};`
  const data_role = await requese_public(res, sql_role)

  // 6、查询 - 所有部门
  const sql_department = `SELECT * FROM ${`department`};`
  const data_department = await requese_public(res, sql_department)
  
  // 7、查询 - 所有部门领导（role_level 小于7） - 内连接查询
  // 不包括管理员
  const leader_min_level = 7
  const sql_leader = `SELECT t1.*, t2.role_name FROM 
  (SELECT * FROM ${`userInfo`} WHERE role_id IN (SELECT id FROM ${`role`} WHERE role_level <= ${leader_min_level}) AND role_id <> 1) t1 
  INNER JOIN ${`role`} t2 
  ON t1.role_id = t2.id`
  const data_leader = await requese_public(res, sql_leader)
  // console.log('121111sql---' + sql_leader)

  // console.log('\n******************* data_menu')
  // console.log(JSON.stringify(data_menu))

  // 将数据库里的字符串 ‘1、3、7’ 转为数组
  data_menu.forEach(element => {
    const id_arr = element.permissions_role_ids?.split('、').map(Number)
    element.permissions_role_ids = id_arr
    if (element.parent_id == 0) element.parent_id = null
  });
  // console.log('\n******************* data_menu')
  // console.log(JSON.stringify(data_menu))

  // console.log('\n******************* data_permissions')
  // console.log(JSON.stringify(data_permissions))

  // console.log('\n******************* data_role')
  // console.log(JSON.stringify(data_role))

  // console.log('\n******************* data_department')
  // console.log(JSON.stringify(data_department))

  // console.log('\n******************* data_leader')
  // console.log(JSON.stringify(data_leader))
  // 6、响应客户端
  success_reply('other/lists', res, '菜单、权限、角色、部门、领导，查询成功！', {
    menu: data_menu,
    permissions: data_permissions,
    role: data_role,
    department: data_department,
    leader:data_leader,
  })

}

// 公共
/** 
 * @description 验证数据库是否存在这条数据（抽离 - 公共方法）
 *        （select * from `tableName` where fieldName=fieldValue）
 * @param {string}  tableName     要查询‘哪张表’
 * @param {string}  fieldName     查询条件，‘哪个字段 ’
 * @param {string}  fieldValue    fieldName ‘字段值’
 * @param {string}  request       哪个请求？比如 'user/add'
 * @returns {Promise} 返回一个Promise，返回参数2个：[type: sqlCheckType, data: any]
 */
function check_if_exists(tableName, fieldName,fieldValue,res, request=''){

  const msg = `查询条件 -> fieldName:${fieldName}  fieldValue:${fieldValue}  tableName:${tableName}`
  console.log('\n查询的tableName是：' + tableName)
  console.log('\n查询的fieldName是：' + fieldName)
  console.log('\n查询的fieldValue是：' + fieldValue)
  // 
  return new Promise((reslove) => {
    var spl = '`'
    var sql_check = `SELECT * FROM ${spl}${tableName}${spl} WHERE ${fieldName}=?`
    var sqlParamters = [fieldValue]; //参数，替换sql里面的占位符？

    var callBack = (err,data) => {
      console.log("check_if_exists -> err: " + err)
      console.log("check_if_exists -> data: " + JSON.stringify(data))
      if (err) {
        console.log('查询出错了 err is: ' + err)
        // mineCallBack(sqlCheckType.Error)
        reslove([sqlCheckType.Error, null])
        err_reply(request, res, '查重查询请求出错了')
      } else {
        if(data === null || data.length == 0){
          console.log('数据不存在，可以插入!')
          // mineCallBack(sqlCheckType.False)
          reslove([sqlCheckType.False, null])
        }else {
          console.log('数据已经存在!')
          // mineCallBack(sqlCheckType.True)
          reslove([sqlCheckType.True, data])
        }
        
      }
    }
    dbConfig.sqlConnect(sql_check, sqlParamters, callBack)
  })
}
module.exports = { other_lists, check_if_exists }